﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using Persistence = Entersoft.Data.DotNetDAL.SQL.Persistence;

namespace BLL
{
    public class Bodegas : Common
    {
        public static Bodega ObtenerBodega(int BodegasId)
        {
            Bodega retorno = null;

            var tmpBodegas = ObtenerBodegas();

            foreach (var tmpBodega in tmpBodegas)
            {
                if (!tmpBodega.BodegasId.Equals(BodegasId)) continue;

                retorno = tmpBodega;
                break;
            }

            return retorno;
        }

        public static Bodega ObtenerBodega(string Glosa)
        {
            Bodega retorno = null;

            var tmpBodegas = ObtenerBodegas();

            foreach (var tmpBodega in tmpBodegas)
            {
                if (!tmpBodega.Glosa.Equals(Glosa)) continue;

                retorno = tmpBodega;
                break;
            }

            return retorno;
        }

        public static IList<Bodega> ObtenerBodegas()
        {
            var retorno = new List<Bodega>();

            var objRP = new Entersoft.Data.DotNetResponse.SQL.Persistence { StoredProcedure = "SP_GET_BODEGAS" };

            using (var objConn = new Persistence(false, ConnDB))
            {
                objConn.ExecuteDataTable(ref objRP);

                if (!objRP.TieneErrores)
                    if (objRP.DataTable != null)
                    {
                        foreach (DataRow row in objRP.DataTable.Rows)
                        {
                            retorno.Add(new Bodega(Convert.ToInt16(row["bodegas_Id"].ToString()), row["bodegas_Glosa"].ToString()));
                        }
                    }
            }

            objRP.Dispose();

            return retorno;
        }

        public static int? ObtenerMaxId()
        {
            var mensaje = "";

            return ObtenerMaxId(ref mensaje);
        }

        public static int? ObtenerMaxId(ref string Mensaje)
        {
            int? retorno = null;

            var objRP = new Entersoft.Data.DotNetResponse.SQL.Persistence { StoredProcedure = "SP_ObtMax_ID" };

            objRP.AddParametro("tbl_bodegas");
            objRP.AddParametro("bodegas_Id");

            using (var objConn = new Persistence(false, ConnDB))
            {
                objConn.ExecuteDataTable(ref objRP);

                if (!objRP.TieneErrores)
                    retorno = (int)objRP.DataTable.Rows[0]["Val_Max"];
                else
                    Mensaje = objRP.Errores;
            }

            objRP.Dispose();

            return retorno;
        }

        public static IList<Pasillo> ObtenerPasillosPorBodega(int BodegasId, ref string Mensaje)
        {
            var retorno = new List<Pasillo>();

            foreach (var tmpPasillo in Pasillos.ObtenerPasillos(BodegasId, ref Mensaje))
            {
                if (tmpPasillo.Bodega.BodegasId != BodegasId) continue;

                retorno.Add(tmpPasillo);
            }

            return retorno;
        }
    }

    [Serializable]
    public class Bodega: Common
    {
        [EditorBrowsable(EditorBrowsableState.Never)]
        private int mBodegasId;

        [EditorBrowsable(EditorBrowsableState.Never)]
        private string mGlosa;

        public Bodega(int BodegasId, string Glosa)
        {
            mBodegasId = BodegasId;
            mGlosa = Glosa;
        }

        public int BodegasId
        {
            get { return mBodegasId; }
            set { mBodegasId = value; }
        }

        public string Glosa
        {
            get { return mGlosa; }
            set { mGlosa = value; }
        }

        public bool Grabar()
        {
            mMensaje = "";

            return Grabar(mBodegasId, mGlosa, ref mMensaje);
        }

        public bool Eliminar()
        {
            mMensaje = "";

            return Eliminar(mBodegasId, ref mMensaje);
        }

        public static bool Eliminar(int BodegasId, ref string Mensaje)
        {
            var retorno = false;

            var objRP = new Entersoft.Data.DotNetResponse.SQL.Persistence { StoredProcedure = "sp_del_Bodega" };

            using (var objConn = new Persistence(true, ConnDB))
            {
                objRP.AddParametro(BodegasId);
                objRP.AddParametro(null);
                objRP.AddParametro(null);

                objConn.ExecuteNonQuery(ref objRP);

                if (!objRP.TieneErrores)
                {
                        retorno = objRP.Parametro[1].Equals(0);
                        Mensaje = objRP.Parametro[2].ToString();
                }
                else
                    Mensaje = objRP.Errores;

                if (retorno)
                    objConn.Commit();
            }

            objRP.Dispose();

            return retorno;
        }

        public static bool Grabar(int BodegasId, string Glosa, ref string Mensaje)
        {
            var retorno = false;

            var objRP = new Entersoft.Data.DotNetResponse.SQL.Persistence { StoredProcedure = "SP_INS_BODEGA" };

            using (var objConn = new Persistence(true, ConnDB))
            {
                objRP.AddParametro(BodegasId);
                objRP.AddParametro(Glosa);
                objRP.AddParametro(null);
                objRP.AddParametro(null);

                objConn.ExecuteNonQuery(ref objRP);

                if (!objRP.TieneErrores)
                {
                    retorno = objRP.Parametro[2].Equals(0);
                    Mensaje = objRP.Parametro[3].ToString();
                }
                else
                    Mensaje = objRP.Errores;

                if (retorno)
                    objConn.Commit();
            }

            objRP.Dispose();

            return retorno;
        }

        public IList<Pasillo> Pasillos()
        {
            return Bodegas.ObtenerPasillosPorBodega(mBodegasId, ref mMensaje);
        }
    }
}